package com.gls.security.server.authorization.jpa.entity;

import com.gls.security.server.authorization.model.ResourceType;
import com.gls.starter.data.jpa.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 资源信息表
 * <p>
 * 需要控制权限的资源，以业务人员能看懂的name呈现.实际关联到一个或多个url上。
 * <p>
 * 树形结构。
 *
 * @author lizhiyong
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Entity
public class Resource extends BaseEntity {

    /**
     * 资源名称，如xx菜单，xx按钮
     */
    private String name;
    /**
     * 资源链接
     */
    private String link;
    /**
     * 图标
     */
    private String icon;
    /**
     * 资源类型
     */
    @Enumerated(EnumType.STRING)
    private ResourceType type;
    /**
     * 实际需要控制权限的url
     */
    @ElementCollection
    private Set<String> urls;
    /**
     * 父资源
     */
    @ManyToOne
    private Resource parent;
    /**
     * 子资源
     */
    @OneToMany(mappedBy = "parent")
    @OrderBy("sort ASC")
    private Set<Resource> childs = new HashSet<>();
}
